package com.controleFamiliar.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.controleFamiliar.facade.CategoriaDespesaFacade;
import com.controleFamiliar.facade.DespesaFacade;
import com.controleFamiliar.form.RelatorioDespesaForm;
import com.controleFamiliar.pojo.CategoriaDespesa;
import com.controleFamiliar.pojo.Despesa;

public class RelatorioDespesaAction extends DispatchAction{
	
	public static final String FORWARD = "relatorioDespesa";
	
	public ActionForward iniciarRelatorioDespesaPeriodo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		RelatorioDespesaForm formulario = (RelatorioDespesaForm) form;
		//Caso haja algum erro retorna para a tela de cadastro
		String forward = FORWARD;
		formulario.limpar();
		try{
			request.setAttribute("tipoRelatorio", "periodo");		
			carregarValores(request);
		}catch(Exception e){
			throw e;
		}	
		return mapping.findForward(forward);
	}
	
	public ActionForward iniciarRelatorioDespesaCategoria(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		RelatorioDespesaForm formulario = (RelatorioDespesaForm) form;
		//Caso haja algum erro retorna para a tela de cadastro
		String forward = FORWARD;
		formulario.limpar();
		try{
			request.setAttribute("tipoRelatorio", "categoria");
						
			//validar permissão do usuário para essa função		
			//Usuario usuario = (Usuario)request.getSession().getAttribute("usuario");
			carregarValores(request);
		}catch(Exception e){
//			throw e;
		}	
		return mapping.findForward(forward);
	}
	
	public ActionForward gerarRelatorioDespesaCategoria(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		RelatorioDespesaForm formulario = (RelatorioDespesaForm) form;
		//Caso haja algum erro retorna para a tela de cadastro
		String forward = FORWARD;
		try{			
			if (formulario.getCodCategoriaSelecionada() == null || formulario.getCodCategoriaSelecionada().isEmpty()){
				request.setAttribute("message", "Favor selecionar uma categoria");
				throw new Exception();
			}
			DespesaFacade dFacade = new DespesaFacade();
			List<Despesa> listaDespesas = dFacade.listarDespesasPorCategoria(formulario.getCodCategoriaSelecionada());
			request.setAttribute("listaDespesas", listaDespesas);
			request.setAttribute("tipoRelatorio", "categoria");
			carregarValores(request);
		}catch(Exception e){
//			throw e;
		}
		return mapping.findForward(forward);
	}
	
	public ActionForward gerarRelatorioDespesaPeriodo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		RelatorioDespesaForm formulario = (RelatorioDespesaForm) form;
		//Caso haja algum erro retorna para a tela de cadastro
		String forward = FORWARD;
		try{			
			if (formulario.getDataInicial() == null || formulario.getDataInicial().isEmpty() || formulario.getDataFinal() == null || formulario.getDataFinal().isEmpty()){
				request.setAttribute("message", "Favor inserir datas");
				throw new Exception();
			}
			DespesaFacade dFacade = new DespesaFacade();
			List<Despesa> listaDespesas = dFacade.listarDespesasPorPeriodo(formulario.getDataInicial(), formulario.getDataFinal());
			request.setAttribute("listaDespesas", listaDespesas);
			request.setAttribute("tipoRelatorio", "periodo");
			carregarValores(request);
		}catch(Exception e){
//			throw e;
		}
		return mapping.findForward(forward);
	}
	
	public void carregarValores(HttpServletRequest request)throws Exception{
		try{
			CategoriaDespesaFacade facade = new CategoriaDespesaFacade();
			List<CategoriaDespesa> listaCategorias = facade.listarTodasCategorias();
			request.setAttribute("listaCategorias", listaCategorias);
		}catch(Exception e){
			throw e;
		}
	}
}
